package com.kukudexin;

/**
 * @author: 酷酷的鑫
 * @Date: 2021/8/5 18:15
 * @description:
 */
public class Test04 {
    public static void main(String[] args) {
        //创建Gen对象时,需要传递两个数据类型
        Gen<Integer,String > obj;       //使用Integer类型代替Gen中的T, 使用String类型替换Gen类中的V
        //调用构造方法时,第一个数据传递Integer对象, 第二个数据传递String字符串
        obj = new Gen<>(Integer.valueOf(123), "hello");

        obj.showTypes();

        //获得对应的数据
        Integer ii = obj.getData1();    //getData1()方法返回Integer对象
        String ss = obj.getData2();
    }
    //演示定义带两个参数的泛型类, 在泛型中可以声明多个类型参数,参数之间使用逗号分隔
    static class  Gen<T, V>{
        //分别使用泛型参数接收的两个类型定义实例变量
        private T data1;
        private  V data2;

        //定义构造方法, 分别接收T类型的数据和V类型的数据
        public Gen(T data1, V data2) {
            this.data1 = data1;
            this.data2 = data2;
        }

        public T getData1() {
            System.out.println(data1);
            return data1;
        }
        public V getData2() {
            System.out.println(data2);
            return data2;
        }
        //显示T类型与V类型
        public void showTypes(){
            System.out.println("T类型: " + data1.getClass().getSimpleName() + " ---- V类型: " + data2.getClass().getSimpleName() );
        }
    }
}
